﻿using TTQT.TTQT_Code;
using TTQT.TTQT_Code.Info;

namespace TTQT.Administration
{
    using System;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;

    /// <summary>
    ///		Summary description for GroupCmd.
    /// </summary>
    public partial class GroupCmd : MasterControl //System.Web.UI.UserControl
    {
        //private string content = null;
        private GroupInfo groupInfo;


        private int CurrentGroupId
        {
            get
            {
                if (Session["CurrentGroupId"] != null)
                {
                    return TTQTCommon.ToInt32(Session["CurrentGroupId"].ToString(), -1);
                }
                else
                    return -1;
            }
            set { Session["CurrentGroupId"] = value; }
        }

        protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);

            lstGroupRoles.Items.Clear();
            DataAccessObject.instance().FillToListBox(lstGroupRoles.Items);

            DataTable dtGroupRoles = DataAccessObject.instance().getCmdsByGroupId(CurrentGroupId);
            string roles = "|";
            foreach (DataRow row in dtGroupRoles.Rows) roles += row["Cmd_ID"].ToString() + "|";

            int i = 0;
            while (i < lstGroupRoles.Items.Count)
            {
                if (roles.IndexOf("|" + lstGroupRoles.Items[i].Value + "|") < 0) lstGroupRoles.Items.RemoveAt(i);
                else i += 1;
            }
        }

        protected void Page_Load(object sender, System.EventArgs e)
        {
            lblUpdateStatus.Text = string.Empty;
            lblError.Text = string.Empty;
            if (!Page.IsPostBack)
            {
                //bindGroup();
                bindGridGroup();
                visiblePanels(true, false, false);
                return;
            }
        }

        private void bindGridGroup()
        {
            try
            {
                dgGroup.DataSource = DataAccessObject.instance().getAllGroup();
                dgGroup.DataBind();
            }
            catch (Exception)
            {
            }
        }

        private void visiblePanels(bool visibleGrid, bool visibleEdit, bool visibleAssignPermisstion)
        {
            this.pnGroupGrid.Visible = visibleGrid;
            this.pnEdit.Visible = visibleEdit;
            this.pnAssignPermission.Visible = visibleAssignPermisstion;
        }

        #region Web Form Designer generated code

        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }

        /// <summary>
        ///		Required method for Designer support - do not modify
        ///		the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.dgGroup.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgGroup_ItemCommand);
            this.dgGroup.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.dgGroup_ItemDataBound);

        }

        #endregion

        // Chức năng thêm quyền
        protected void cmdAdd_Click(object sender, System.EventArgs e)
        {
            try
            {
                foreach (ListItem item in this.lstRoles.Items)
                {
                    if (item.Selected)
                    {
                        try
                        {
                            int z = CurrentGroupId;
                            int y = TTQTCommon.ToInt32(item.Value, 0);
                        }
                        catch (Exception ex)
                        {
                            string f = ex.ToString();
                        }
                        DataAccessObject.instance().addCmdToGroup(CurrentGroupId, TTQTCommon.ToInt32(item.Value, 0));

                        // Write a Role Adding log to Log Table
                        WriteLog(TTQTCommon.ToInt32(Session["UserId"], -1), "Thêm quyền của nhóm người dùng (" + lblGroupName.Text + ")",
                                 item.Text.Replace('.', ' ').Trim(), "");
                    }
                }
                lblUpdateStatus.Text = "Cập nhật thành công!";
            }
            catch (Exception ex)
            {
                //
                string fdsa = ex.ToString();
                //
                lblUpdateStatus.Text = "Có lỗi khi cập nhật! Bạn vui lòng kiểm tra lại!";
            }
        }

        // Chức năng bớt quyền
        protected void cmdRemover_Click(object sender, System.EventArgs e)
        {
            try
            {
                foreach (ListItem item in lstGroupRoles.Items)
                    if (item.Selected)
                    {
                        DataAccessObject.instance().deleteCmdFromGroup(CurrentGroupId, TTQTCommon.ToInt32(item.Value, 0));

                        // Write a Role Removing log to Log Table
                        WriteLog(TTQTCommon.ToInt32(Session["UserId"], -1), "Bớt quyền của nhóm người dùng (" + lblGroupName.Text + ")",
                                 item.Text.Replace('.', ' ').Trim(), "");
                    }
                lblUpdateStatus.Text = "Cập nhật thành công!";
            }
            catch (Exception ex)
            {
                lblUpdateStatus.Text = "Có lỗi khi cập nhật! Bạn vui lòng kiểm tra lại!";
            }
        }

        protected void cmdCancel_Click(object sender, System.EventArgs e)
        {
            visiblePanels(true, false, false);
        }

        protected void cmdUpdate_Click(object sender, System.EventArgs e)
        {
            try
            {
                // Nếu là sửa Thì ID sẽ khác rỗng
                if (this.txtGroupID.Text != "")
                {
                    if (!this.txtGroupName.Text.Equals(Session["edittingGroupName"].ToString()))
                    {
                        if (DataAccessObject.instance().checkExistGroup(this.txtGroupName.Text))
                        {
                            lblError.Text = "Nhóm này đã tồn tại";
                            return;
                        }
                    }
                    GroupInfo obj = DataAccessObject.instance().getGroup(TTQTCommon.ToInt32(this.txtGroupID.Text, -1));
                    if (obj == null) return;
                    obj.GroupName = this.txtGroupName.Text;
                    obj.GroupDescription = this.txtGroupDescription.Text;
                    obj.CnDuocPhan= chkCNDuocPhan.Checked? 1: 0;
                    obj.CnDauMoi = chkCNDauMoi.Checked ? 1 : 0;
                    obj.CnKhongDauMoi = chkCNKhongDauMoi.Checked ? 1 : 0;
                    DataAccessObject.instance().updateGroup(obj);
                    this.lblUpdateStatus.Text = "Cập nhật thành công!";
                    bindGridGroup();
                    visiblePanels(true, false, false);

                    //Write a Update log to Log Table					
                    
                }
                // Nếu là thêm mới thì ID sẽ rỗng
                else
                {
                    // Thực hiện thêm mới Group
                    if (DataAccessObject.instance().checkExistGroup(this.txtGroupName.Text))
                    {
                        lblError.Text = "Nhóm này đã tồn tại";
                        return;
                    }
                    GroupInfo obj = new GroupInfo();

                    obj.GroupName = this.txtGroupName.Text;
                    obj.GroupDescription = this.txtGroupDescription.Text;
                    obj.CnDuocPhan = chkCNDuocPhan.Checked ? 1 : 0;
                    obj.CnDauMoi = chkCNDauMoi.Checked ? 1 : 0;
                    obj.CnKhongDauMoi = chkCNKhongDauMoi.Checked ? 1 : 0;
                    DataAccessObject.instance().addGroup(obj);
                    this.lblUpdateStatus.Text = "Cập nhật thành công!";
                    bindGridGroup();
                    visiblePanels(true, false, false);

                    //Write an ADD NEW log to Database
                    WriteLog(TTQTCommon.ToInt32(Session["UserId"], -1), "Thêm mới nhóm người dùng", obj.GroupName, "");
                }
            }
            catch (Exception ex)
            {
                lblUpdateStatus.Attributes.Add("style", "color:red;font-weight:bold;");
                this.lblUpdateStatus.Text = ex.ToString();
                //Log methods here
            }
        }

        private void dgGroup_ItemCommand(object source, DataGridCommandEventArgs e)
        {
            GroupInfo obj = null;
            if (e.CommandName == "cmdEdit")
            {
                visiblePanels(false, true, false);
                obj = DataAccessObject.instance().getGroup(int.Parse(e.Item.Cells[0].Text));
                Session["EdittingGroupName"] = obj.GroupName;
                this.txtGroupID.Text = obj.GroupId.ToString();
                this.txtGroupName.Text = obj.GroupName;
                this.txtGroupDescription.Text = obj.GroupDescription;
                chkCNDuocPhan.Checked = obj.CnDuocPhan == 0 ? false : true;
                chkCNDauMoi.Checked = obj.CnDauMoi == 0 ? false : true;
                chkCNKhongDauMoi.Checked = obj.CnKhongDauMoi == 0 ? false : true;
            }
            else if (e.CommandName == "cmdAssign")
            {
                CurrentGroupId = TTQTCommon.ToInt32(e.Item.Cells[0].Text, -1);
                try
                {
                    groupInfo = DataAccessObject.instance().getGroup(TTQTCommon.ToInt32(e.Item.Cells[0].Text, -1));
                    //if (groupInfo == null) Response.Redirect(TTQTCommon.TTQTWebHomePath+"Administration/Login.aspx");
                    lblGroupName.Text = groupInfo.GroupName;
                    lblUpdateStatus.Text = string.Empty;
                    this.lstRoles.Items.Clear();
                    DataAccessObject.instance().FillToListBox(this.lstRoles.Items);
                }
                catch (Exception ex)
                {
                    lblUpdateStatus.Text = "Lỗi rồi!";
                }
                visiblePanels(false, false, true);
            }

            else if (e.CommandName == "cmdDelete")
            {
                try
                {
                    GroupInfo oCurrentGroup = DataAccessObject.instance().getGroup(int.Parse(e.Item.Cells[0].Text));
                    DataAccessObject.instance().deleteGroup(int.Parse(e.Item.Cells[0].Text));
                    bindGridGroup();

                    //Write a Delete log to Log Table
                    WriteLog(TTQTCommon.ToInt32(Session["UserId"], -1), "Xóa nhóm người dùng", oCurrentGroup.GroupName, "");
                }
                catch (Exception ex)
                {
                    string khackhac = ex.ToString();
                }
            }
        }

        private void dgGroup_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
        {
            if (e.Item.ItemIndex < 0) return;
            Button cmdDel = (Button)e.Item.FindControl("cmdDelete");
            if (cmdDel != null) cmdDel.Attributes.Add("onclick", "delete_Confirm");
        }

        protected void cmdAddGroup_Click(object sender, System.EventArgs e)
        {
            visiblePanels(false, true, false);
            this.txtGroupID.Text = string.Empty;
            this.txtGroupName.Text = string.Empty;
            this.txtGroupDescription.Text = string.Empty;
        }
        private void WriteLog(int iUserId, string sType, string sContent, string sTranId)
        {
            string str_ip = Request.UserHostAddress;
            LogInfo o_log = new LogInfo(str_ip, userName, sType, sContent, sTranId, this.brnCode);
            DataAccessObject.instance().addLog(o_log);
        }
        protected void cmdQuayLai_Click(object sender, EventArgs e)
        {
            visiblePanels(true, false, false);
        }
    }
}